﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using AssessmentTool.Controls;
using ModelLayer;
using AssessmentTool.ServiceBridge;
using AssessmentTool.Services.DTO;
using AssessmentTool.PresentationLogic.EventArguments;
using AssessmentTool.Services;


namespace AssessmentTool.PresentationLogic.Controllers
{
    public class StatoAvanzamentoController:AbstractController<StatoAvanzamento>
    {

        
        public StatoAvanzamentoController(StatoAvanzamento element)
            : base(element)
        {
            ed.subscrive("ASSESSMENTCOMPLETATO", assessmentCompletato);
            ed.subscrive("ASSESSMENTMODIFICATO", assessmentModificato);
            ed.subscrive("ENDBUILDCOMPENTENZE", azzera);
            ed.subscrive("LOGOUT", onLogout);
            ed.subscrive("SAVED", azzera);
        }

        public void assessmentCompletato(EventArgs e)
        {
            UtenteLogged ul = (UtenteLogged)Session.getInstance().getValue("USERLOGGED");
            if (!ul.grantModificaModello)
            {
                element.visualizzaMessaggioReadOnly();
            }
            else
            {
                element.visualizzaMessaggioConsolidamento();
            }
        }
        public void assessmentModificato(EventArgs e)
        {
            element.visualizzaMessaggioSalvataggio();
        }
        public void azzera(EventArgs e)
        {
            element.nascondiVisualizzaMessaggioSalvataggio();
            
        }
        public void onLogout(EventArgs e)
        {
            element.nascondi();
        }


        public void consolida()
        {
            Utente u = (Utente)Session.getInstance().getValue("USER");
            UtenteServiceBridge.storicizza(u.Sessioni[0], proxy_DoStoricizeCompleted);
            
        }
        void proxy_DoStoricizeCompleted(object sender, storicizzaCompletedEventArgs e)
        {
            ed.dispatch("STOPBUSY", null);
            if (e.Error == null)
            {
                Session.getInstance().addValue("USERLOGGED", e.Result);
                assessmentCompletato(null);
                ed.dispatch("CONSOLIDATO", null);
            }
            else
            {
                ed.dispatch("SHOWMESSAGE", new ShowMessageEventArgs()
                {
                    Testo = "Attenzione! Errore nel consolidare il modello..\n" +
                        "Se l'errore dovesse ripresentarsi si prega rieffettuare il login.",
                    Error = true,
                    Critico = false
                });
            }
        }
    }
}
